package com.tarena.lbs.user.dao.repository.impl;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tarena.lbs.user.dao.mapper.UserGroupMapper;
import com.tarena.lbs.user.dao.repository.UserGroupRepository;
import com.tarena.lbs.user.pojo.po.UserGroupPO;
import com.tarena.lbs.user.pojo.query.UserGroupQuery;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class UserGroupRepositoryImpl implements UserGroupRepository {
    private static final Logger log = LoggerFactory.getLogger(UserGroupRepositoryImpl.class);
    @Autowired
    private UserGroupMapper userGroupMapper;
    public PageInfo<UserGroupPO> pagesList(UserGroupQuery query) {
        log.debug("查询人群数据访问参数：{}", query);
        QueryWrapper<UserGroupPO> queryWrapper = assembleUserGroupQuery(query);
        PageHelper.startPage(query.getPageNo(), query.getPageSize());
        List<UserGroupPO> po = userGroupMapper.selectList(queryWrapper);
        log.debug("查询人群数据访问返回：{}", po);
        return new PageInfo<>(po);
    }
    private QueryWrapper<UserGroupPO> assembleUserGroupQuery(UserGroupQuery query) {
        QueryWrapper<UserGroupPO> queryWrapper = new QueryWrapper<>();
        // 人群名模糊查询
        if (StringUtils.isNotBlank(query.getGroupName())) {
            queryWrapper.like("group_name", query.getGroupName());
        }
        // 时间范围查询
        if (query.getStartTime() != null && query.getEndTime() != null) {
            queryWrapper.between("create_at", query.getStartTime(), query.getEndTime());
        } else if (query.getStartTime() != null) {
            queryWrapper.ge("create_at", query.getStartTime());
        } else if (query.getEndTime() != null) {
            queryWrapper.le("create_at", query.getEndTime());
        }
        return queryWrapper;
    }
    @Override
    public void saveUserGroup(UserGroupPO po) {
        log.debug("保存人群数据访问参数：{}", po);
        if (po.getId() != null) {
            // 存在ID则更新
            userGroupMapper.updateById(po);
        } else {
            // 不存在ID则新增
            userGroupMapper.insert(po);
        }
    }
    @Override
    public void deleteUserGroup(Integer id) {
        log.debug("删除人群数据访问参数：{}", id);
        userGroupMapper.deleteById(id);
        log.debug("删除人群数据访问返回：{}", id);
    }
}
